/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.indicadores.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.indicadores.vo.AnaliseValorIndicadorVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object da entidade AnaliseValorIndicador. Essa classe é responsável
 * por todas as operações de banco de dados relacionadas à entidade.
 * 
 * @author Marcos Mello Nobrega Soares 20136178
 */
public class AnaliseValorIndicadorDAO extends BaseDAO<AnaliseValorIndicadorVO> {

    @Override
    public void inserir(AnaliseValorIndicadorVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_AnaliseValorIndicador(DT_AnaliseValorIndicador, DS_AnaliseValorIndicador, CD_ValorIndicador)");
        query.append("VALUES (?, ?, ?)");

        List<?> parametros = criarParametros(entidade.getDtAnaliseValorIndicador(),
                entidade.getDsAnaliseValorIndicador(), entidade.getCdValorIndicador());

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();

        entidade.setIdAnaliseValorIndicador(idGerado);
    }

    @Override
    public void alterar(AnaliseValorIndicadorVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_AnaliseValorIndicador SET DT_AnaliseValorIndicador = ?,");
        query.append("DS_AnaliseValorIndicador = ?,");
        query.append("CD_ValorIndicador = ?");
        query.append("WHERE ID_AnaliseValorIndicador = ?");

        List<?> parametros = criarParametros(entidade.getDtAnaliseValorIndicador(),
                entidade.getDsAnaliseValorIndicador(),entidade.getCdValorIndicador(),
                entidade.getIdAnaliseValorIndicador());

        executarAlteracao(query.toString(), parametros);
    }

    @Override
    public void excluir(AnaliseValorIndicadorVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_AnaliseValorIndicador");
        query.append("WHERE ID_AnaliseValorIndicador = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdAnaliseValorIndicador()));
    }

    @Override
    public AnaliseValorIndicadorVO consultarPorId(Serializable id) {

        AnaliseValorIndicadorVO entidade = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_AnaliseValorIndicador T WHERE T.ID_AnaliseValorIndicador = ?");

        entidade = consultarUm(query.toString(), criarParametros(id));

        return entidade;
    }

    @Override
    public List<AnaliseValorIndicadorVO> consultarPorExemplo(AnaliseValorIndicadorVO exemplo) {

        List<AnaliseValorIndicadorVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_AnaliseValorIndicador T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected AnaliseValorIndicadorVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        AnaliseValorIndicadorVO entidade = new AnaliseValorIndicadorVO();
        
        entidade.setIdAnaliseValorIndicador(new Integer(rs.getInt("ID_AnaliseValorIndicador")));        
        entidade.setDtAnaliseValorIndicador(rs.getDate("DT_AnaliseValorIndicador"));
        entidade.setDsAnaliseValorIndicador(rs.getString("DS_AnaliseValorIndicador"));
        entidade.setCdValorIndicador(new Integer(rs.getInt("CD_ValorIndicador")));

        return entidade;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, AnaliseValorIndicadorVO exemplo) {

        if (exemplo.getDtAnaliseValorIndicador() != null) {
            query.append("AND T.DT_AnaliseValorIndicador = ?");
            adicionarParametro(exemplo.getDtAnaliseValorIndicador());
        }

        if (exemplo.getDsAnaliseValorIndicador() != null && !exemplo.getDsAnaliseValorIndicador().isEmpty()) {
            query.append("AND T.DS_AnaliseValorIndicador LIKE ?");
            adicionarParametro("%" + exemplo.getDsAnaliseValorIndicador() + "%");
        }
        
        if (exemplo.getCdValorIndicador() != null) {
            query.append("AND T.CD_ValorIndicador = ?");
            adicionarParametro(exemplo.getCdValorIndicador());
        }
    }
}
